home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 001-100 / 001-025 / 003 / roff / itoeng.c next >
C/C++ Source or Header  |  1995-03-17  |  2KB  |  97 lines

  1. static char *units[]    = {
  2.     "", "one", "two", "three", "four", "five",
  3.     "six", "seven", "eight", "nine" };
  4.  
  5. static char *tens[]    = {
  6.     "", "", "twenty", "thirty", "forty", "fifty",
  7.     "sixty", "seventy", "eighty", "ninety" };
  8.  
  9. static char *teens[]    = {
  10.     "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen",
  11.     "sixteen", "seventeen", "eighteen", "nineteen" };
  12.  
  13. short itoeng(n,s,e)
  14.     register short n;
  15.     register char *s,*e;{
  16.     char *itoe();
  17.     register char *p;
  18.  
  19.     p = s;
  20.     e--;
  21.     s = itoe(n,s,e);
  22.     if(s[-1] == ' ')
  23.         s--;
  24.     *s++ = '\0';
  25.     return((short)(s - p));
  26. }
  27.  
  28. char *itoe(n,s,e)
  29.     register short n;
  30.     register char *s,*e;{
  31.     short flag;
  32.     char *copy(),*prword();
  33.  
  34.     flag = 0;
  35.     if(n < 0){
  36.         s = copy("minus ",s,e);
  37.         n = -n;
  38.         }
  39.     if(n == 0)
  40.         return(copy("zero",s,e));
  41.     if(n >= 1000){
  42.         s = itoe(n / 1000,s,e);
  43.         s = copy("thousand ",s,e);
  44.         n %= 1000;
  45.         flag++;
  46.         }
  47.     if(n >= 100){
  48.         s = prword(units,n / 100,s,e);
  49.         s = copy("hundred ",s,e);
  50.         n %= 100;
  51.         flag++;
  52.         }
  53.     if(n > 0 && flag)
  54.         s = copy("and ",s,e);
  55.     if(n >= 20){
  56.         s = prword(tens,n / 10,s,e);
  57.         n %= 10;
  58.         }
  59.     else if(10 <= n && n < 20)
  60.         return(prword(teens,n - 10,s,e));
  61.     return(prword(units,n,s,e));
  62. }
  63.  
  64. char *prword(tab,n,s,e)
  65.     char *tab[];
  66.     register short n;
  67.     register char *s,*e;{
  68.     char *copy();
  69.  
  70.     s = copy(tab[n],s,e);
  71.     return(copy(" ",s,e));
  72. }
  73.  
  74. char *copy(p,s,e)
  75.     register char *p,*s,*e;{
  76.  
  77.     while(*p != '\0' && s != e)
  78.         *s++ = *p++;
  79.     return(s);
  80. }
  81.  
  82. #ifdef    DEBUG
  83. #include    <stdio.h>
  84.  
  85. main(){
  86.     char line[128];
  87.     short i,n;
  88.     short itoeng();
  89.  
  90.     for(;;){
  91.         scanf("%d",&n);
  92.         i = itoeng(n,line,&line[128]);
  93.         printf("itoeng returns %d, %d = %s\n",i,n,line);
  94.         }
  95. }
  96. #endif
  97.